System and method for a work distribution service

ABSTRACT

Systems and methods for a work distribution service. At a multi-tenant platform that provides a work distribution service for a plurality of external systems, a priority is assigned to a first work item of a first external system. The work item is received via a RESTful work item API call request. The priority is assigned based on work item attributes of the work item and a workflow instruction corresponding to workflow information specified by the work item. The workflow instruction is provided by the external system via a RESTful Workflow API. A worker is assigned to the work item based on: the priority of the work item, the workflow information, and worker state managed by the first external system via a RESTful Worker API. The worker state includes worker attributes. The work item is generated by the external system, and the workflow instruction is managed by the external system.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. application Ser. No.14/659,332, filed 16 Mar. 2015, which claims the benefit of U.S.Provisional Application Ser. No. 61/953,562, filed on 14 Mar. 2014, bothof which are incorporated in their entirety by this reference.

TECHNICAL FIELD

This invention relates generally to the platform as a service field, andmore specifically to a new and useful system and method for a workdistribution service in the platform as a service field.

BACKGROUND

Call centers and customer care centers today build complexinfrastructure to manage distributing customer calls and requests toworkers that can respond to the customers. In other industries,companies must build similar infrastructure to serve other problems ofwork distribution. Developing such infrastructure is costly to developand maintain. Thus, there is a need in the platform as a service fieldto create a new and useful system and method for a work distributionservice. This invention provides such a new and useful system andmethod.

BRIEF DESCRIPTION OF THE FIGURES

FIG. 1 is a schematic representation of a system according to an exampleembodiment;

FIG. 2 is a flowchart representation of a method according to an exampleembodiment;

FIGS. 3-5 are exemplary workflow instruction documents according toexample embodiments;

FIG. 6 is a communication flowchart of retrieving a workflow instructiondocument according to an example embodiment;

FIG. 7 is schematic representation of a system according to an exampleembodiment;

FIG. 8 is a flowchart representation of a method according to an exampleembodiment;

FIG. 9 is a flowchart representation of a method according to an exampleembodiment;

FIG. 10 is an exemplary workflow instruction document according to anexample embodiment;

FIG. 11 is a representation of a data structure of an exemplary workitem according to an example embodiment;

FIGS. 12A-C are representations of exemplary prioritization functionsaccording to example embodiments;

FIGS. 12D-E are representations of exemplary distribution functionsaccording to example embodiments;

FIG. 13 is a flowchart representation of a method according to anexample embodiment;

FIG. 14 is a representation of exemplary account records managed by amulti-tenant account module according to an example embodiment;

FIG. 15 is a representation of exemplary work collection sets managed bya work collections module according to an example embodiment;

FIGS. 16A-C are a flowchart representations of methods according toexample embodiments;

FIG. 17 is an architecture diagram of a work distribution systemaccording to an example embodiment;

FIG. 18 is an architecture diagram of an application server of anexternal system according to an example embodiment; and

FIG. 19 is an architecture diagram of a worker endpoint device of anexternal system according to an example embodiment.

DESCRIPTION OF THE PREFERRED EMBODIMENTS

The following description of preferred embodiments of the invention isnot intended to limit the invention to these preferred embodiments, butrather to enable any person skilled in the art to make and use thisinvention.

1. System for a Work Distribution Service

As shown in FIG. 1, a system 100 for a work distribution service of apreferred embodiment can include a worker application programminginterface (API) 160, a worker state server 180, a work item API 150, aset of work collections 110, and a work distribution processing engine120. The system functions to manage and facilitate customized workdistribution solutions. The system preferably enables outside developersto develop use-case specific implementations within the generalizedframework of the system. The system can serve as a set of platformprimitives and tools from which arbitrarily complex work distributionssolutions can be built quickly and easily. The system preferablyincludes a number of input/output programmatic interface channels toconnect workers with sources of work.

The system is preferably implemented as a work distribution service of amulti-tenant infrastructure. The system may alternatively be used as asingle tenant instance (e.g., an on premise solution). As a singletenant implementation, the system preferably retains the flexibilityprovided in a similar multi-tenant version so that a developer cancustomize the single tenant implementation for a developer's ownpurpose. The system may additionally be implemented in combination withor in cooperation with a communication platform 107. The communicationplatform is preferably used in the execution of communications basedapplications. For example, the communication platform can facilitateexecution of automated call logic such as in U.S. Pat. No. 8,306,021issued on 6 Nov. 2012, which is hereby incorporated in its entirety bythis reference. The system and/or a second communication platform maycommunicate over a variety of different communication protocols andmediums such as voice (e.g., PSTN, SIP, WebRTC, etc.), video, screensharing, text messaging (e.g., SMS, proprietary IP based messaging,etc.), media messaging (e.g., MMS, proprietary IP based messaging,etc.), email, fax, and/or any suitable communications protocol. Thesystem may alternatively be applied to any suitable problem withchallenges in matching a work item to a worker that can work on the workitem. For example, the system can additionally be applied to crowdsourced services such as vehicular ride-share platforms, service bookingproducts, question/solution applications, and/or any suitable problemrelating to the pairing of a pool of workers with worker requests.

As a multitenant infrastructure, the system can additionally include anaccount system within which an account record or records are stored tomaintain individual account instance implementations. An account caninclude various operational settings and preferences. Also management ofworkers, work items, work distribution workflows, collections, and/ormedia can be scoped within an associated account. Herein, an account (ormore specifically a developer account or managing account) defines thecontrolling account for at least one particular set of workflow fordistributing work items to workers. The system preferably functions toallow a variety of different accounts address distinct work distributionproblems in a flexible and customized manned.

The worker application programming interface (API) 160 of a preferredembodiment functions to enable a worker endpoint to interface with thesystem. Additionally, other suitable sources of worker related metadatamay communicatively interface with the system through the worker API.For example, an external presence service may supply presence metadataabout a set of workers. The worker API 160 is preferably a REST API butmay alternatively be SOAP or any suitable type of API. Preferably workerstatus is maintained for each worker of each account instance that isinstantiated and executing on the platform. The worker API 160 in onevariation may be used over a realtime communication channel establishedbetween the system and a set of worker endpoints. The realtimecommunication channel can be a webRTC media channel, a websocket, or achannel using any suitable realtime communication protocol. The realtimecommunication channel may additionally integrate with a workdistribution interface 190. A work distribution interface can beintegrated within the worker API 160 or may alternatively be separateinterface.

A worker endpoint 140 can include a worker application endpoint 141 anda media endpoint 142. A worker application endpoint is preferably aclient application accessible by the system 100 over an internetprotocol channel. The worker application endpoint 141 may be configuredby an account holder to provide any suitable functionality. For example,user interfaces may be displayed allowing a worker to login, set status,display information relating to a current or past work item, appendmeta-data to the work item (to be saved internally or synchronized withthe system), stream realtime worker attributes (e.g., geolocationinformation) or provide any suitable customized functionality. Theworker application endpoint 141 can be a desktop application, a mobileapplication, an embedded application of a device (e.g., a wearablecomputer), or any suitable form of an application. In one variation, theworker application endpoint 141 may be provided by the system entity inpart or whole. For example, a worker application SDK could be providedto facilitate easier integration with the system. Similarly, thefunctionality of the worker application endpoint 141 can be embeddedwithin a separate application such as a client communication applicationused to make IP-based voice/video calls. As one example, the workerapplication endpoint 141 is used as a call center application—theapplication is used to connect and inform a worker about a currentcustomer work request. In another example, the worker applicationendpoint 141 is a mobile application used by volunteer drivers within acar share program—the application is used to assign the driver to acustomer requesting a ride.

The worker endpoint 140 can additionally include a media endpoint 142such as a voice endpoint (e.g., a PSTN phone number or SIP address),video endpoint, screen-sharing endpoint, messaging endpoint (e.g.,endpoint for SMS, MMS, or IP-based messaging), and/or any suitable typeof media endpoint. In one variation, a client based media endpoint canbe integrated directly into the worker application endpoint 141. Thestatus of the media endpoint 142 may additionally be integrated with theworker API 160 such that status can be updated based on media endpointactivity. For example, when a worker ends a call and hangs up, theworker status can be set to available.

The worker state server 180 of the preferred embodiment functions tomaintain and monitor worker status and properties. The worker stateserver 180 is preferably in communication with a worker endpoint (e.g.,140) through the worker API (e.g., 160). As described above, otherinformation sources can interface with the system 100; the worker stateserver 180 can include additional interfaces to access the additionalinformation sources. The worker state server 180 can store workerrelated information. Workers are preferably stored in association with aparent managing account that manages the account instance within thesystem 100. Multiple accounts each have independent pools or collectionsof workers. In one variation, a collection of workers can be made publicor shared across accounts.

The work item API 150 of the preferred embodiment functions as aninterface through which work items can be added to the system. A workitem (e.g., the work item 111 of FIG. 1) is preferably a task or arequest made on behalf of an account to be enqueued and serviced by aworker. Similar to the worker API 160, the work item API 150 ispreferably a REST API but may alternatively be SOAP or any suitable typeof API. The work item API 150 can be used to add, remove, read, and/ormodify a work item. Modification to a work item can additionally beperformed while the work item is in a collection. Additionally, thesystem can include a set of workflow related instructions, servicecalls, or other suitable mechanisms to trigger creating a work item onbehalf of some object. The instructions can be executed during a relatedoperation of the platform (e.g., handling or routing a phone call). Ifthe workflow instruction (e.g., an instruction included in the workflowinstruction document 121 of FIG. 1) is encountered, a work item can beadded to a collection according to the parameters of the workflowinstruction. When used in combination with a communication platform(e.g., 107 of FIG. 1), a work item can include a reference to a voicecall, a video call, screensharing session, text message, media message,or any suitable type of media. A work item associated communication maybe synchronous or asynchronous. The work item associated communicationmay additionally be incoming communication, established communication,or an outbound communication. Alternatively the work item can be made onbehalf of any suitable object.

In one implementation, a work item (e.g., the work item 111 of FIG. 1)includes a set of attributes. At least some of the attributes may bedefined for the particular use-case. The attributes can be characterizedin a JSON object, and XML document, or any suitable data objectdescriptor. For example, work item can include any metadata related tothe communication such as an originating phone number or endpointaddress. The work item can include a reference to external media such asa current communication session (e.g., phone call or video chatsession), an image, user-account profile, or any suitable type of media.

The set of work collections 110 of the preferred embodiment function tostore pending work items (e.g., the work item 111). A work collectioncan have some natural priority and operational logic that define defaultbehavior such as executing a first in first out type dequeuingmethodology. The collection can be a queue, a bin, a set, a list, or anysuitable collection. The collection is more preferably ordered inresponse to prioritization specified by the work distribution processingengine 120. The collection may alternatively be an unordered collectionof work items.

The work distribution processing engine 120 of the preferred embodimentfunctions to process queued/added work items in coordination with theworker resources. The work distribution processing engine 120 can betriggered in response to work item activity (e.g., a new work item),worker activity (e.g., change in worker status), or collection status(e.g., volume of work items), and/or any suitable event. In a preferredembodiment, the work distribution processing engine works on a selectedwork item. The work distribution processing engine preferably includes acomponent to process a workflow instruction document. A workflowinstruction document (e.g., 121 of FIG. 1) is preferably a script, anapplication file/object, set of configurations, or any suitablecustomizable set of instructions. The instructions can be used to definelogic on how a particular work item is paired with a worker. Theproperties of the work item, the workers, and the status of thecollection(s), may be used within the logic of the workflow instructiondocument. In a preferred variation, the work distribution processingengine 120 can include a component to retrieve a workflow instructiondocument from a remote server (e.g., the server 130 of FIG. 1). Anexternally retrieved workflow instruction document can enable externaldevelopers to use internal logic to dynamically customize the manner ofprioritizing and assigning a work item to a worker. Alternatively, aworkflow instruction document can be locally cached or stored. Accountdefined directives are processed to select a worker managed by theworker status server. The work distribution processing engine 120 oralternatively the system 100 can include a distribution interface (e.g.,the distribution interface 190 of FIG. 1), which coordinatesdistribution of a work item.

2. Method for a Work Distribution Service

A method for a work distribution service of a preferred embodiment caninclude collecting worker status S100, adding work items to a collectionS200, prioritizing work items in the collection through developerdirectives S300, and distributing a work item to a worker according topriority of the work item in the collection S400. The method functionsto provide a set of programmable primitives and tools usable by avariety of applications to facilitate matching requests to entities thatcan fulfill the requests. The method is preferably applied in the caseof matching user-based workers to work. One exemplary usage, would befor a customer service application pairing customers to companyrepresentatives. The method may alternatively be used in matching anytwo items. The workers are preferably characterized as being a limitedresource such as people, businesses, machines, or any suitable entitycapable of fulfilling a work item request. The method preferablyutilizes a programmable worker interface (e.g., 160) through whichinformation can be obtained from a worker and delivered to the worker; aprogrammable work item interface (e.g., 150) through which work itemsare added to the system; and a distribution processing engine interface(e.g., 170 of FIG. 1) used to apply defined logic on assigning work andprioritization.

The method is preferably implemented within a multitenant platform asdescribed above, but may alternatively use any suitable system. Whenapplying the method for a specific account instance within the platform,a single entity can control supplying the work items and the workers tofulfill the work requests. However, the flexibility of the method canenable any number of parties to participate within a single accountinstance. For example, one account instance of the method can allow workitems to be retrieved from a plurality of different sources and parties(authenticated on behalf of the account), and similarly the pool ofworkers may come from yet another source or sources. The methodfunctions to connect sources of work requests and workers to fulfill thework.

Herein, the method is described as it could be used incommunications-based work distribution application (e.g., call centers,customer support applications, etc.), but the method may alternativelybe applied more generally to any suitable application of assigning awork request to a pool of workers.

Block S100, which includes collecting worker status, functions tomonitor and manage workers' capability to fulfill a work item. BlockS100 preferably includes receiving worker status update through a workerAPI (e.g., 160). The worker API is preferably a REST API but mayalternatively be SOAP or any suitable type of API. Preferably workerstatus is performed for each account instance that is instantiated andexecuting on the platform and for each worker of those accountinstances. Collecting worker status can further include establishing arealtime communication channel with a client application of a worker.The realtime communication channel can be communicated through webRTC, awebsocket, or any suitable realtime communication protocol. In onevariation, the realtime communication channel is used for pushing workitems requests to a worker application endpoint in addition tocollecting worker status. Additionally, worker status can be collectedthrough secondary channels. For example, presence information can beobtained from an outside source. Outside sources are preferablyassociated with a worker through some unique identifier.

Worker status can be collected based on API calls (via API 160) made toa worker resource (of the worker sate server 180). A worker resource ispreferably a data object, record, or set of data properties storedwithin an endpoint state server (e.g., 180). A worker resource caninclude a unique identifier, account properties, worker information,status, a status callback reference, group information, attributes,and/or any suitable properties. A unique identifier can be analphanumeric code or any suitable identifying label to identify theworker when making calls. The account properties can include a secureidentifier of the account or subaccount managing the work distributioninstance. Worker information can include worker based information suchas name, gender, and other suitable properties. The status propertypreferably defines the state of the worker. Status preferably includesat least two classes of state: available and unavailable. Other statusstates can include offline, online, idle, busy, and/or any suitable formof status. The status callback reference can include a URI and/or amethod that defines a resource that can be notified upon status changein the status. The group information can include classification, labels,tags, or other associations to which the worker belongs. The groupinformation can be used to map an organizational map to the worker suchas which business department(s) the worker works under. The attributesproperty is preferably a customizable set of attributes. The attributesin one implementation are defined as a JSON object but may alternativelybe an XML object or any suitable data interchange format. The propertieswithin the attributes field can be arbitrarily set. For example, acustomer service application may include a language field which can beset with a set of languages the worker can speak and the proficiency ateach language, seniority level which can be set with a value indicatinghow junior or senior the worker is, and a skills field including tagsfor any special skills the worker may have. A worker resource can beupdated at any suitable time. As mentioned above, a realtimecommunication channel may be established and used in updating workerattributes and/or other properties. As one example, a driver basedapplication may continuously or frequently update the geolocationinformation of a driver by updating a location attribute. Any API callsmade in the method can further include authenticating parameters, whichare used to verify authenticity of the API calls.

In one implementation, the method could include providing a workerendpoint application (e.g., 140 of FIG. 1) and/or software developmentkit to facilitate connecting through the worker API 160. Providing aworker endpoint application can simplify the process of interacting withendpoint state server 180. The provided worker endpoint application caninclude a worker application endpoint (e.g., 141 of FIG. 1) and/or amedia endpoint (e.g., 142 of FIG. 1). The worker application endpoint(e.g., 141 of FIG. 1) is preferably used in communicating worker statusand receiving work items. Media related to assigned work items can bedelivered to the media endpoint (e.g., 142 of FIG. 1). In the case ofusing the method in combination with a communications platform, theworker endpoint can be provided through a client communication SDK. Theclient communication SDK may be used in enabling voice, video,messaging, and/or other forms of communication through the SDK. The SDKcould be extended to provide worker registration and status updatefunctions.

Block S200, which includes adding a work item (e.g., 111 of FIG. 1) to acollection (e.g., 110 of FIG. 1), functions to enqueue/add work itemsbefore assigning them to a worker. A work item (e.g., 111) is preferablya data object that characterizes a body of work that can befulfilled/serviced by a worker. The work item preferably includes a setof properties defining content and conditions of the request. In oneimplementation the work item includes a use-case defined attributesobject (e.g., a JSON or other suitable data interchange format). Adeveloper can include any suitable set of attributes and dataarchitecture within the work item. These attributes may be used in theprioritization processing stage and/or within the worker endpoint (e.g.,140). The instruction and/or request to add the work item can specify arouting rule URI, which can be used in block S300 to determine thedistribution directives.

In one preferred implementation, a work item represents an incoming oroutgoing communication. If the work item is an asynchronouscommunication (e.g., an SMS, MMS, email, fax, IP message, and the like)then the contents of the communication may be included within a contentattribute of the work item. If the work item is an incoming synchronouscommunication, the work item can include any metadata related to thecommunication such as an originating phone number or endpoint address,and the work item can include a reference to the media. Adding a workitem to a collection may include holding, parking, or otherwise managingin-session, established media before being distributed to a worker. Ifthe work item is made in association with a live customer call, then thecustomer call session can be set to be handled according to anapplication defined for that state of call waiting. In one variation,all work items are enqueued and processed before being assigned to aworker. In another variation, work items may be enqueued if there is noworker available—if a worker is available, the work request may beautomatically distributed to an available worker. When adding the workitem to a collection, the collection may be a default collection, butthe collection may alternatively be a specified collection. Multiplecollections may be maintained. The distribution processing stage can acton the different collections in any suitable manner.

In one variation, adding work items to a collection includes adding awork item through an application programming interface (e.g., the workitem API 150 of FIG. 1). In an implementation, work items are added byan account application (e.g., the account application 105 of FIG. 1) ofan external system or a communication platform (e.g., the communicationplatform 107 of FIG. 1). The interface is preferably a web API such aREST API, SOAP API, or any suitable type of API. Adding a work item canbe added by an account posting to a work item endpoint, specifyingattributes of the work item. In response to a request, the work item iscreated and added to a general or specified collection. A work itemsimilar to a worker resource can include a unique identifier. Inresponse, a request developer can receive information indicating thestatus of their request. Successfully adding a work item can result in aresponse indicating the successful addition of the work item andinformation about the created work item (e.g., a unique identifier). Theunique identifier could be used to update the attributes of the workitem while enqueued. For example, if the work item relates to travelingentity, the geolocation of the traveling entity could be a definedattribute, which is updated while enqueued.

As mentioned above, the work distribution platform may be implemented incombination with a communication platform (e.g., 107) and/or anysuitable type of secondary platform. The secondary application mayinclude functionality or a mechanism to execute or trigger applicationinstructions. In the communication platform (e.g., 107), a set oftelephony instructions can be used to instruct a communication router onhow to interact and/or route the communication. The set of secondaryplatform instructions or triggers may include a work enqueueinstruction. The enqueue instruction is used to trigger the queueing ofa specified platform item. The enqueue instruction preferably results ina work item being generated and optionally a media item if required. Forexample, a telephone call may be handled within the communicationplatform (e.g., 107). At some point during the call an enqueueinstruction may be encountered. The enqueue instruction can includeproperties such as a routing rule URI to fetch a workflow instructiondocument. The properties of the call can be packaged into a work itemand added to a collection (e.g., by using the work item API 150).Additionally, the media of the call could be temporarily distributed toa wait-state application. The work item will include a reference to thecommunication session in the wait-state application. When distributed toa worker, the communication session is preferably transitioned to theworker.

Other suitable interfaces can be created to manage additional oralternative forms of interfacing with the collection of work items. Forexample, an email interface could be created wherein an account coulddirect inbound email messages through the email interface of the workdistribution system, and the emails could be added as work items.

Block S300, which includes prioritizing work items in the collectionthrough developer directives functions to apply work item ordering andselection. Block S300 is preferably invoked upon enqueueing or adding awork item. Alternatively, the enqueued work items can be polledperiodically, upon worker status changes, or according to any suitableevent. Prioritizing work items preferably includes processing queuedwork items according to the developer directives. The developerdirectives are preferably a set of workflow instructions definingworkflow and logic in prioritizing, assigning, and/or distributing awork item to a worker. Developer directives are preferably included in aworkflow instruction document—a workflow instruction document (e.g., 121of FIG. 1) can be formed as a script, an application file/object, amarkup language document defining logic, or any suitable mechanism forcharacterizing processing. The workflow instruction document can beformed through a set of different instruction primitives that can beused to define logic and actions taken for distributing work.Prioritizing work items preferably includes observing worker status. Thestate of a worker, a set of workers (e.g., set of available workers), ofa work item, or a set of work items can be used as inputs to theworkflow instruction document. In a preferred embodiment, the workflowinstruction document is processed for a selected work item and theworker information can be referenced within the workflow instructiondocument. Alternative approaches may apply an alternative focus such asprocessing the workflow instruction document for each available workerwherein the set of workflow items can be referenced in the document. Theworkflow instruction document may be used to customize distributionapproach between different account instances. More preferably, theworkflow instruction document can enable dynamically adjustingdistribution of work items based on a particular work item. As such, aworkflow instruction document can be used to serve a variety of usecases. For example, a workflow may be designed to distribute workaccording to worker (agent) language skills as shown in FIG. 3. In somevariations, distribution heuristics and rules may be internal and fixedwithin the system, some may be configured behavior through accountsettings, and others could be uniquely defined within a workflowinstruction document. In one variation, a workflow instruction documentcan include a function defining prioritization of the work item forselection within the collection and a function defining distributing aselected work item.

One type of heuristic is distribution prioritization, which may be basedon origin of a work item (e.g., who is the work item for), the historyof the work item (e.g., how long has the work item been queued, how manytimes has it been queued), worker properties, or any suitable type ofprioritization. In an example of user-prioritization, work items can beprioritized based on the user profiles associated with the work items.The user profiles in this example can be customers of a developeraccount. As an example, there may exist three tiers of user profiles:free, basic plan, and premium plan. The work requests items can beprioritized in order from highest to lowest as premium, basic, and freethrough customizing a workflow instruction document as shown in FIG. 4.As an example of a history prioritization, work items could beprioritized according to wait-time. This heuristic may be combined withthe user-type prioritization to prevent lower priority work items fromsuffering excessively long amounts of time when there is a high volumeof higher user-priority work items. Workers may be similarlyprioritized. In one example, a worker can be assigned to two groups forexample a sales group and a support group. If the worker specialized insales, then the worker is prioritized for sales related work requests,but if no sales work items are queued, then the worker can serve supportrelated work requests. Such worker prioritization can improveutilization of worker resources. In one other example, prioritizing workcan include prioritizing worker selection based on idle time of aworker, which functions to more evenly distribute work across workers.

As another heuristics, prioritization can apply expanding targets, whichfunctions to attempt to match each work item with the best worker whileensuring the service level targets are met consistently. As shown inFIG. 5, the expanding targets can attempt a top priority target for afirst period, then the target worker is expanded for a next if the workitem is not serviced in the first period. The target can continue toexpand until a default or widest target is used. Expanding targets canbe customized to a particular user profile associated with the work itemto direct the work item to an individually assigned worker. For example,a user making a call to a banking customer service center may have anassigned financial advisor. The financial advisor could be set as theinitial target for that call.

In one variation, the workflow instruction document is a localconfiguration. An account, prior to use of the method, can set aworkflow instruction document or otherwise define the sortingdirectives. A pre-defined workflow instruction document can be usedglobally within an account instance. The pre-defined workflowinstruction may alternatively be assigned to a particular collection, towork items with a particular property, or assigned in any suitablemanner. In another variation, the workflow instruction document ispreferably retrieved in an external application server (e.g., onecontrolled and operated in accordance with an account holder) through aremote procedural call (RPC) type request and response model. As shownin FIG. 6, metadata around the work item, the collection, and/or theworkers is preferably sent to a specified routing rule URI. The URIpreferably references an application server of the entity associatedwith the account instance. The application server preferably usesinternal state information, performs any suitable API requests back tothe workflow distribution system, and generates a workflow instructiondocument. The workflow instruction document is returned to the workdistribution processing engine. In one variation, an account instancecan be selectively configured for local storage of the directives or toretrieve the instructions from an external resource.

In alternative embodiments, the method may be implemented withoutgranular customization of prioritization. The work distributionprocessing engine can use internal prioritization heuristics such asthose mentioned above. A set of prioritization hooks could be built intothe work distribution processing engine such that an account instancecould selectively invoke different heuristics.

Block S400, which includes distributing a work item to a workeraccording to priority of the work item in the collection functions todeliver a work item to a worker endpoint. In response to theprioritizing of work items, a pairing of a work item and a worker ispreferably selected. The selection is preferably based upon the definedlogic of selecting a targeted worker. When a pairing of a work item andworker is established, the work item is delivered to the workerendpoint. As mentioned above, a worker application endpoint (e.g., 141)can have an established realtime communication channel to the workdistribution system 100. The work item (e.g., 111) and the associatedproperties are preferably pushed or otherwise transmitted to the workerapplication endpoint (e.g., 141). In some variations, the work item(e.g., 111) may be delivered to a media endpoint (e.g., 142) in additionto or instead of a worker application endpoint (e.g., 141). In onevariation, the work item of an asynchronous communication can includethe media content of the associated communication. The media contentcould be transmitted to the worker application endpoint 141, but themedia content may alternatively be delivered over the original medium asthe incoming communication or over any suitable protocol. For example,an inbound SMS message to a customer service center is queued as a workitem containing a content property indicating the SMS content. When aworker is assigned to the work item, the SMS content can be detected andthe work item is delivered as an SMS message. In another variation, awork item can include a reference to external media content. Theexternal media content can be simultaneously transmitted to a mediaendpoint 142 of a worker. For example, an incoming phone call to acustomer service center triggers a creation and queuing of a work item,the caller is directed to a wait-state application to handle the callsession while waiting for assignment to a worker. When a worker isselected, the work item and related metadata may be delivered to aworker application endpoint 141, and the caller is redirected andconnected with a media endpoint 142 of the worker. In the case ofoutbound communications associated with a work item, the intendeddestination is preferably characterized in the properties of the workitem. When the work item is delivered to the worker application endpoint141, a communication can be established with the destination endpoint.Alternatively, both the worker and the destination can be called andmerged.

If work item is distributed to a worker, but the worker does not respondto the work item, the method may include redistributing the work itemand updating the worker status. For example, if a call associated with awork item is directed to the worker, but the worker never picks up orresponds to the call, the status of the worker can be updated to ‘notready’. The worker may be required to update status again before beingassigned to a work item. In another variation, a nonresponsive callbackmay be defined so that the response can be developer defined.

In some cases, a worker may be unable to complete or fully fulfill thework item. The worker endpoint could be configured to enable a work itemto be returned or re-entered in the system to be redistributed. In onevariation, the work item could be programmatically added as a new workitem preferably with attributes to indicate how to better distribute thework to a more qualified worker. However, the work item may bere-entered (e.g., with the same work item), wherein the methodautomatically weights the prioritization of distributing the work itemto a qualified worker. The workflow instructions can include mechanismsthat can be applied to logging such as marking preference level fordifferent work distribution options.

Additionally the method may include work distribution logging, whichfunctions to collect and provide access to worker, work, and collectionanalytics. Logging can record individual worker statistics (e.g., numberof work items, rate of work items, distribution of types of work items),success of routing (e.g., are work items distributed to preferred,secondary, or last-resort workers), collection statistics (e.g.,utilization capacity, distribution of work item properties), and/or anysuitable type of information.

3. System for a Multi-Tenant Work Distribution Platform

FIG. 7 is a schematic representation of a work distribution system 700for a multi-tenant work distribution platform, according to an exampleembodiment. The system 700 is similar to the system 100 of FIG. 1.

Multi-Tenant

The system 700 provides a multitenant platform meaning that the workdistribution platform can be used for the processing of one or moreapplications of a plurality of external systems. Each external system(e.g., 770) has at least one work distribution account at the system700. For example, a call center service provider, CRM service provider,and a vehicular ride-share platform can each have work distributionaccounts at the system 700. As another example, multiple different callcenter service providers can each have work distribution accounts at thesystem 700. As yet another example, a vehicular ride-share service, aservice booking platform, and a question/solution application can eachhave work distribution accounts at the system 700. In the exampleembodiment of FIG. 7, an external system can have multiple workdistribution accounts. For example, an external system that has multiplebusiness units (e.g., sales and customer support) can add a workdistribution account for each of the business units. In the exampleembodiment, an external system can add sub-accounts to each one of itswork distribution accounts. For example, a call center system providercan add a sub-account to its work distribution account for each of thecall center system provider's customers. By providing sub-accounts toits customers, the call center system provider can allow its customersto manage work distribution for their respective call center applicationinstances. Management of accounts and sub-accounts, authorization foraccount management access, billing for account use, and fraud detectionis provided by a multitenant account module (e.g., the multi-tenantaccount module 701). The foregoing examples are not intended to belimiting. Any type of external system can have any combination ofaccounts and sub-accounts at the system 700.

Modules

As shown in FIG. 7, the system 700 includes a multi-tenant accountmodule 701, a worker API module 702, a worker state module 703, a workitem API module 704, a work collections module 705, a work distributionengine 706, and a distribution API module 710.

In the example embodiment of FIG. 7, the worker API module 702 functionssimilarly to the worker API 160 of FIG. 1, the worker state module 703functions similarly to the worker state server 180 of FIG. 1, the workitem API module 704 functions similarly to the work item API 150 of FIG.1, the work distribution engine 706 functions similarly to the workdistribution processing engine 120 of FIG. 1, the work collectionsmodule 705 manages work collections similar to the work collections 110of FIG. 1, and the distribution API module 710 functions similarly tothe work distribution interface 190 of FIG. 1.

In the example embodiment of FIG. 7, the modules (e.g., 701, 702, 703,704, 705, 706 and 710 of FIG. 7) include instructions that are executedby any combination of one or more processing units. In the exampleembodiment, each processing unit includes one or more processorscommunicatively coupled to one or more of a RAM, ROM, andmachine-readable storage medium; the one or more processors of theprocessing unit receive instructions stored by the one or more of a RAM,ROM, and machine-readable storage medium via a bus; and the one or moreprocessors execute the received instructions. In some embodiments, theprocessing unit is an ASIC (Application-Specific Integrated Circuit). Insome embodiments, the processing unit is a SoC (System-on-Chip). In someembodiments, one processing unit includes the account module 701 theworker API module 702, the worker state module 703, the work item APImodule 704, the work collections module 705, the work distributionengine 706, and the distribution API module 710. In some embodiments, aplurality of processing units include the account module 701, the workerAPI module 702, the worker state module 703, the work item API module704, the work collections module 705, the work distribution engine 706,and the distribution API module 710. In some embodiments, one processingunit includes one of at least one of the account module 701 the workerAPI module 702, the worker state module 703, the work item API module704, the work collections module 705, the work distribution engine 706,and the distribution API module 710. In some embodiments, one processingunit includes a plurality of at least one of the account module 704 theworker API module 702, the worker state module 703, the work item APImodule 704, the work collections module 705, the work distributionengine 706, and the distribution API module 710. In some embodiments,the one or more processing units are included in one or more serverdevices.

External Systems

The system 700 is communicatively coupled to at least a first externalsystem 770 via the worker API module 702, the work item API module 704,and a workflow API module 707 of the work distribution engine 706. In animplementation, the external system 770 is communicatively coupled tothe system 700 via the distribution API module 710.

In the example embodiment, the external system 770 is at least one of acustomer service system, a CRM system, a call center system, a serviceprovider system, a vehicular ride-share system, a service bookingsystem, a question/solution system, and any other type of externalsystem that pairs a pool of workers with worker requests.

The external system 770 includes an application server 771 and workerendpoints 772 and 773. In the example embodiment, the worker endpoints772 and 773 are similar to the worker endpoint 140 of FIG. 1.

The worker endpoints 772 and 773 each correspond to a respective workerof the external system 770. In an implementation, each of the workerendpoints 772 and 773 include a worker application endpoint (e.g., 774,775) and a media endpoint (e.g., 776, 777). In the example embodiment,the worker application endpoints 774 and 775 are similar to the workerapplication endpoint 141 of FIG. 1, and the media endpoints 776 and 777are similar to the media endpoint 142 of FIG. 1.

In an implementation, each of the worker endpoints 772 and 773 isassociated with at least one processing unit that stores and executesmachine-readable instructions of a worker application (e.g., 1916 ofFIG. 19) associated with the worker application endpoint and a mediaapplication (e.g., 1917 of FIG. 19) associated with the media endpointof the worker endpoint. In some implementations, at least one processingunit of the respective endpoint (e.g., 772, 773) is included in one of amobile device, a computer, a server, a wearable device, or any suitabletype of device. In some implementations, worker endpoints do not includea media endpoint.

In the example embodiment, worker application endpoints include at leastone of a Websocket Server Endpoint, a REST API endpoint of thedistribution API 190, and an WebRTC datachannel. In the exampleembodiment, media endpoints include at least one of a PSTN endpoint, aSIP endpoint, and a WebRTC datachannel. In some embodiments, endpointsinclude e-mail addresses.

Multi-Tenant Account Module 701

The multi-tenant account module 701 functions to manage workdistribution accounts of the system 700, provide authorization foraccount management access to access a work distribution account, billfor account use, and perform fraud detection. In the example embodiment,the account module 701 is constructed to manage account records foraccounts and sub-accounts of each of the external systems of the workdistribution platform (of the system 700). The account module 701 isconstructed to provide authorization for account management access,billing for account use, and fraud detection. The account module 701associates operational settings and preferences for each account record,including work distribution settings and preferences. The account module701 associates at least one set of work distribution primitives witheach account record. In the example embodiment, work distributionprimitives include: 1) workers, 2) work items, 3) work distributionworkflows, and 4) work collections.

An account holder (e.g., an external system having an account, or a userof the external system having a sub-account) configures and manages thework distribution primitives by using at least one of the worker APImodule 702, the Work Item API Module 704, and the Workflow API Module707. In the example embodiment, an account holder configures workcollections by using the workflow API Module 707. In some embodiments,an account holder configures work collections by using an API for thework collections.

In some embodiments, sets of work distribution primitives for an accountare organized into primitive groups. In such embodiments, an account canhave multiple primitive groups, with each primitive group having a setof workers, work items, work distribution workflows and workcollections. In some embodiments, sets of work distribution primitivesfor an account are organized into workspaces. In such embodiments, anaccount can have multiple workspaces, with each workspace having a setof workers, work items, work distribution workflows and workcollections.

In the example embodiment, API call requests received by the worker APImodule 702, the work item API module 704, and workflow API module 707include authenticating parameters, which are used by the system 700 toverify authenticity of the API call requests. In an implementation, APIcall requests received by the worker API module 702, the work item APImodule 704, and workflow API module 707 each specify an account ID and acorresponding authentication token, and the respective module uses theaccount module 701 to authenticate the API call request.

In an implementation, the account module 701 uses the account ID of eachAPI call request to bill the respective account for account use on a perAPI call basis.

In an implementation, the API call requests are HTTP requests.

Sub-Accounts

The account module 701 manages sub-accounts such that a hierarchy ofaccounts can be created. In an implementation, a work distributionaccount (e.g., a parent account) can create or contain multiple workdistribution sub-accounts (e.g., children accounts). In animplementation, sub-accounts are created through an interface by thesub-account holder or alternatively through an API by the parent accountholder. For example, an application developer may create a customerservice application, and then allow end users to sign-up as customerswithin the developer's parent work distribution account. In animplementation, the work distribution sub-accounts operate within thescope of the parent account. In an implementation, the sub-accounts arecustomized by the parent account and/or customized by sub-accountholder.

Fraud Detection

In the example embodiment, the account module 701 monitors, measures,and detects instances of illicit use that occur within or through thework distribution system 700. In some embodiments, a fraud scoringsystem monitors, measures, and detects instances of illicit use thatoccur within or through the work distribution system 700.

The account module 701 monitors API call requests received by the workerAPI module 702, the work item API module 704, and workflow API module707 to detect fraudulent API call requests.

In an implementation, the account module 701 receives work distributionaccount (and sub-account) usage data (e.g., API calls), calculates afraud score from the usage data block, detects when fraud scores of anaccount satisfy a fraud threshold, and takes action when a fraud scoresatisfies a fraud threshold block.

In an implementation, the account module 701 performs fraud detection ina manner similar to that described in U.S. Pat. No. 8,737,962, issued 27May 2014, which is hereby incorporated in its entirety by thisreference.

In an implementation, the account module 701 processes usage data togenerate a metric that reflects the likelihood that illicit use of thesystem 700 is occurring. Fraud scores are preferably calculated for aset of fraud rules. The set of fraud rules are used to calculate a setof fraud scores (e.g., measure or indicators of fraud). Additionally,fraud thresholds can define when particular types of actions are taken.A fraud rule preferably includes a usage condition, a usage data timewindow, and an account age condition. The fraud rules may additionallybe conditions within a single account or pattern conditions acrossmultiple accounts. The usage conditions are particular patterns in usagedata (e.g., account configuration or API call history). The usageconditions are preferably particular patterns such as some threshold onthe number or percentage of events or resources that would triggeractivating the fraud rule (e.g., assigning the defined fraud score forthat rule). The usage condition can additionally specify conditionsfound across multiple accounts. For example, a usage condition may befor identical/corresponding billing information configured in more thanthree accounts. The usage data time window is the window that is used todefine what data is analyzed. Some exemplary time windows could includethe past 24 hours, the past week, the past month, the past year, oracross all data (e.g., no time window). The account age condition maydefine for how long the rule is monitored for an account. Some illicituse scenarios may only be seen with new accounts. For example, theaccount age condition may configure a fraud rule to apply to an accountfor the first week after the account is created. If the conditions ofthe fraud rule are satisfied a defined score is preferably assigned.These fraud scores are preferably stored per account. If the fraud ruleis defined for condition patterns across multiple accounts, the fraudscore is preferably assigned to each account. The fraud score ispreferably a numeric value but may alternatively be a label or anysuitable construct to communicate fraud likelihood. In the exampleembodiment, high fraud scores indicate a greater likelihood of illicituse. In some embodiments, any suitable relationship may be definedbetween fraud scores and likelihood of illicit use. A fraud score ispreferably associated with at least one key/identifier. The key may bean account, sub-account, an endpoint (e.g., a phone number), a creditcard hash, or any suitable key. A plurality of fraud scores (e.g., oneper fraud rule) is preferably calculated to monitor various entities andapproaches to performing fraud in the system 700. For example, a seriesof fraud scores may be calculated to monitor accounts for one form offraudulent API calls, while another series of fraud scores may becalculated to monitor credit card abuse across accounts. The fraud scoreis preferably indicative of activity during a specified time window, butmay alternatively be an aggregate value (preferably factoring in olderfraud scores to reflect multiple time windows). Calculation of fraudscores may additionally involve creating associations between subsets ofthe received usage data. Associations can be made based on useraccounts, credit cards used to pay for accounts, endpoints or endpointprefixes, source or destination carriers, and/or any suitable parameterthat can be used to associate various data points in the usage data.

In the example embodiment, the account module 701 takes action reactingto fraud scores that indicate illicit behavior. The reaction to a fraudscore may include flagging the account, throttling API call requests (orother platform usage requests) of an account, requesting additionalbilling information, notifying account holder, notifying an analyst ofthe work distribution platform, performing additional fraud detectionanalysis on the account, blocking particular actions on the account, orperforming any suitable action. In a sub-account variation, the parentaccount of a sub-account is preferably notified of the sub-accountillicit behavior. The notification can be an email notification, amessage within a work distribution platform web platform, ornotification made through the API of the work distribution platform.Account holders may have multiple sub-accounts using their serviceprovided on top of the work distribution platform. By performing thefraud regulation by sub-accounts, the work distribution platform canavoid taking action against the parent account itself since manysub-accounts may be using the work distribution platform in a propermanner. This functions to simplify and abstract the fraud preventionaspect away from parent account holders such that the work distributionplatform can handle illicit use detection.

In an implementation, the account module 701 includes a set of fraudrules (e.g., a rule set) stored using any suitable schema. The rule setpreferably enables various heuristics to be configured and/or updated tokeep current with the latest fraud attempts. Fraud score patterns mayinclude thresholds for a particular fraud score or alternatively a groupof fraud scores. Rule sets may be dependent on measured metrics incombination with a threshold, time period for the metrics, and accountage. Alternatively, any suitable parameters may be specified todetermine a rule set. Fraud score patterns may alternatively be trendingpatterns from a time series of related fraud scores. Fraud reactionspreferably include suspending an account, blacklisting credit cardnumbers, blacklisting application URI's or IP's, rate-limiting servicesprovided to an offending account, remove or adjust services provided toan offending account, flag the account for a human fraud analyst toinvestigate, and/or any suitable course of action. There mayadditionally be different level of responses based on the severity ofthe fraud score, and fraud reactions may be applied in stages if thefraud score does not subside.

Work Distribution Account Records

In the example embodiment, each work distribution account recordincludes the following fields: 1) Parent Account ID, 2) Account ID, 3)Authentication Token, 4) Account Holder Information, 5) AccountPreferences, 6) Account Balance, 7) Primitive Groups, and 8) FraudScores. For parent accounts, the Parent Account ID is empty. Forsub-accounts, the Parent Account ID indicates the parent account. TheAccount ID and the Authentication Token are compared with an Account IDand an Authentication Token of a received API call request toauthenticate the request. Account Holder Information includesinformation such as, for example, account holder name, account holdercontact information, account holder billing information, and the like.Account preferences include any operational settings and preferences,and work distribution settings and preferences of the account holder.Account Balance indicates billing charges for the account holder's useof the work distribution system 700, including charges for each billableAPI call request. Primitive Groups indicate the primitive groupsconfigured for the account holder. In implementations in which the workdistribution system uses workspaces instead of primitive groups, theaccount record indicates workspaces configured for each account holder.Fraud Scores indicates fraud scores calculated by the account module 701for the account holder. FIG. 14 depicts exemplary account recordsmanaged by the multi-tenant account module 701. As shown in FIG. 14,account records 1401 and 1404 are associated with the same accountholder. The account record 1401 has two sub-accounts 1402 and 1403. Thesub-accounts 1402 and 1403 are associated with customers of the accountholder of the account record 1401. The account holder of account records1401 and 1404 is associated with an external system (e.g.,“Salesforce.com”). The account holder of sub-account record 1402 isassociated with a second external system (e.g., “CocaCola.com”) and theaccount holder of sub-account record 1403 is associated with a thirdexternal system (e.g., “HomeDepot.com”). The account holder of accountrecord 1405 is associated with a fourth external system (e.g.,“Shopify.com”).

Worker API Module 702

The worker API Module 702 functions to provide a Worker API that is usedby an external system (e.g., 770) to manage workers of a specifiedaccount.

Configuration and state of each worker is managed by the worker statemodule 703 in association with a corresponding account or sub-account.In the example embodiment, the external system uses the Worker API toconfigure worker attributes for each worker. In the example embodiment,a worker application associated with a worker application endpoint(e.g., 141 of FIGS. 1, 774 and 775 of FIG. 7) of the external system 770uses the Worker API to provide a worker state of a worker associatedwith the worker application endpoint. In the example embodiment, theWorker API is a REST API.

The Worker API Module 702 is constructed to process requests receivedfrom an external system (e.g., 770) to add a worker to the workdistribution system 700, and requests received from an external systemto remove a worker from the work distribution system 700, read a workerresource (stored in the worker state module 703) of a worker, and updatea worker (e.g., update worker status, update worker attributes).

In the example embodiment, API call requests received by the worker APImodule 702 include authenticating parameters, which are used by thesystem 700 to verify authenticity of the API call requests. In animplementation, API call requests received by the worker API module 702specify an account ID and a corresponding authentication token, and theworker API module 702 uses the account module 701 to authenticate theAPI call request.

Table 1 shows the API call requests (and the corresponding parameters)that are processed by the worker API module 702, in accordance with animplementation.

As shown in Table 1, in an implementation, the Add Worker API callrequest includes the optional parameter <Primitive Group Identifier> tospecify a Primitive Group Identifier for the added worker. In animplementation, the work distribution system 700 automatically assigns aPrimitive Group Identifier for the added worker based on AccountPreferences of the work distribution account specified by the <AccountIdentifier> parameter.

TABLE 1 Worker API WORKER API CALL REQUEST PARAMETERS Add Worker <WorkerName>, <Worker Attributes>, <Account Identifier>, <AuthenticationToken>, (Optional Parameters: <Primitive Group Identifier>) RemoveWorker <Worker Name>, <Account Identifier>, <Authentication Token> ReadWorker Resource <Worker Name>, <Account Identifier>, (managed by theWorker State <Authentication Token> Module 703) Update Worker Status<Worker Name>, <Worker Status>, <Account Identifier>, <AuthenticationToken> Update Worker Attributes <Worker Name>, <Worker Attributes>,<Account Identifier>, <Authentication Token>

Worker State Module 703

The worker state module 703 functions to receive worker state for anassociated account (or sub-account) via the worker API Module 702, andmanage received worker state of each worker in association with thecorresponding account (or sub-account). The worker state module 703functions to provide worker state during assignment of workers to workitems.

The worker state module 703 collects worker state and stores collectedworker state for a worker in a respective worker resource, as describedfor block S100.

In an implementation, each worker resource includes the followinginformation: 1) Worker Identifier, 2) Account Identifier, 3) PrimitiveGroup Identifier, 4) Worker Name, 5) Worker Attributes, 6) WorkerStatus, 7) Worker Idle Time.

Work Item API Module 704

The work item API Module 704 functions to provide a Work Item API thatis used by an external system (e.g., 770 of FIG. 7) to add work items tothe work distribution system 700 for a specified account. In the exampleembodiment of FIG. 7, work items are similar to the work item 111 asdescribed above for FIG. 1.

In the example embodiment, the work item API module 704 (in conjunctionwith the work collections module 705) adds work items to a collection,as described for block S200 of FIG. 1.

The work item API Module 704 is constructed to process requests receivedfrom an external system to add work items to the work distributionsystem 700, and requests received from an external system to remove,read, and modify work items included in the work distribution system700.

In the example embodiment, an external system adds a work item bysending a Work Item API ADD request to the work distribution system 700.The ADD request specifies an account (or sub-account), work itemattributes, and workflow information. In an implementation, the workcollections module 705 stores work item resources for each added workitem. In an implementation, a work item resource is at least one of adata object, record, or set of data properties stored within the workcollections module 705. In an implementation, each work item resourceincludes the following information: 1) Work Item Identifier, 2) AccountIdentifier, 3) Primitive Group Identifier, 4) Workflow Information, 5)Work Item Attributes, 6) Work Item Age, 7) Work Item Priority, 8) WorkCollection Identifier, and 9) Assignment Status.

In an implementation, the Work Item Identifier is a unique identifierassigned to the work item by the work distribution system 700. TheAccount Identifier and the Primitive Group Identifier identify the workdistribution account and the primitive group, respectively, associatedwith the work item. The Workflow Information indicates the workflowinformation provided for the work item in the Work Item API ADD requestthat adds the work item to the system 700. The Work Item Attributesindicates the work item attributes provided for the work item in theWork Item API ADD request that adds the work item to the system 700. TheWork Collection Identifier identifies the work collection to which thework distribution system 700 has added the work item. The Work Item Ageindicates an amount of time the work item has resided in the workcollection identified by the Work Collection Identifier. The Work ItemPriority indicates the priority value assigned to the work item. In animplementation, if no priority has been assigned to the work item, theWork Item Priority is empty. The Assignment Status indicates the statusof assignment of the work item to a worker of the system 700. In animplementation, the Assignment Status indicates one of the followingstates: 1) the work item is waiting to be assigned to a worker, 2) aworker of the system 700 has been assigned to the work item, but theworker has not yet confirmed receipt of the work item, and 3) a workerhas been assigned to the work item and the worker has confirmed receiptof the work item, and 4) the work item has been cancelled before beingassigned a worker. In an implementation, in a case where a worker hasbeen assigned to the work item, the Assignment Status indicates theassigned worker.

In the example embodiment, work item attributes are used to prioritizethe work item and allocate a worker to the work item. In the exampleembodiment, work item attributes are also used at worker endpoints(e.g., 140 of FIG. 1, 772, 773 of FIG. 7) during processing of the workitem by a worker corresponding to the worker endpoint.

In an implementation, the work distribution system 700 uses the workflowinformation to access a workflow instruction document of the externalsystem (e.g., 770) that added the work-item. The work distributionplatform 700 uses the workflow instruction document to assign a priorityto the work item and to assign a worker to the work item. In animplementation, the workflow information is a URI that identifies aresource at the external system (e.g., 770) that provides the workflowinstruction document for the added work item.

In an implementation, the work collections module 705 stores workcollection resources for each added work collection. In animplementation, a work collection resource is at least one of a dataobject, record, or set of data properties stored within the workcollections module 705. In an implementation, each work collectionresource includes the following information: 1) Work CollectionIdentifier, 2) Account Identifier, 3) Primitive Group Identifier, and 4)Work Collection Name.

In an implementation, the Work Collection Identifier is a uniqueidentifier assigned to the work collection by the work distributionsystem 700.

In the example embodiment, API call requests received by the work itemAPI module 704 include authenticating parameters, which are used by thesystem 700 to verify authenticity of the API call requests. In animplementation, API call requests received by the work item API module704 specify an account ID and a corresponding authentication token, andthe work item API module 704 uses the account module 701 to authenticatethe API call request.

Table 2 shows the API call requests (and the corresponding parameters)that are processed by the work item API module 704, in accordance withan implementation.

TABLE 2 Work Item API WORK ITEM API CALL REQUEST PARAMETERS Add WorkItem <Work Item Attributes>, <Workflow Information>, <AccountIdentifier>, <Authentication Token>, (Optional Parameters: <WorkCollection Identifier>, <Primitive Group Identifier>) Remove Work Item<Worker Item Identifier>, <Account Identifier>, <Authentication Token>Read Work Item Resource <Worker Item Identifier>, <Account (managed bythe Work Identifier>, <Authentication Token> Collections Module 705)Update Work Item <Worker Item Identifier>, <Worker AttributesAttributes>, <Account Identifier>, <Authentication Token> Update WorkItem <Worker Item Identifier>, <Worker Assignment Status AssignmentStatus>, <Account Identifier>, <Authentication Token> Add WorkCollection <Work Collection Name>, <Account Identifier>, <AuthenticationToken>, (Optional Parameters: <Primitive Group Identifier>) Remove WorkCollection <Worker Collection Identifier>, <Account Identifier>,<Authentication Token> Read Work Collection <Work Collection Name>,<Account Resource (managed by the Identifier>, <Authentication Token>Work Collections Module 705)

In an implementation, the work distribution system 700 responds to aWork Item API ADD request by providing the requestor (e.g., the externalsystem 770) with a Work Item Identifier in the case of a successful ADDoperation, or an error message in a case of an unsuccessful ADDoperation.

In an implementation, the Add Work Item API call request includes theoptional parameters <Work Collection Identifier> and <Primitive GroupIdentifier> to specify one or both of a Work Collection Identifier and aPrimitive Group Identifier for the added work item. In animplementation, the work distribution system 700 automatically assigns aWork Collection Identifier and a Primitive Group Identifier for theadded work item based on Account Preferences of the work distributionaccount specified by the <Account Identifier> parameter.

In an implementation, the Add Work Collection API call request includesthe optional parameter <Primitive Group Identifier> to specify aPrimitive Group Identifier for the added work collection.

In an implementation, the work distribution system 700 automaticallyassigns a Primitive Group Identifier for the added work collection basedon Account Preferences of the work distribution account specified by the<Account Identifier> parameter.

Work Collections Module 705

In the example embodiment, the work collections Module 705 functions tomanage sets of work collections of all accounts and sub-accounts of thework distribution system 700. In an implementation, a set of workcollections is a primitive group. In an implementation, a set of workcollections is a workspace.

In the example embodiment, a pending work item (e.g., a work item thatis added to the system 700 but not assigned to a worker) of an account(or sub-account) resides in a work collection of the account (orsub-account), and the work collection module 705 manages the workcollections of the system 700. In the example embodiment, each accountand sub-account of the work distribution system 700 has a set of one ormore work collections, and the work collections module 705 manages thesets of work collections of all accounts and sub-accounts of the workdistribution platform 700.

FIG. 15 depicts exemplary work collection sets managed by the workcollections module 705. As shown in FIG. 15, the work collections module705 manages work collection sets 1541, 1542, 1543, 1544 and 1545. Thework collection set 1541 includes three work collections 1551, 1552 and1553. The work collection set 1542 includes one work collection 1554.The work collection set 1543 includes two work collections 1555 and1556. The work collection set 1544 includes two work collections 1557and 1558. The work collection set 1545 includes one work collection1559.

In the example embodiment, work collections 1551 to 1559 are similar tothe work collections 110 of FIG. 1.

The work collections 1551 to 1559 include work items 1561 to 1575 asshown in FIG. 15. In the example embodiment, the work items 1561 to 1575are each similar to the work item 111 of FIG. 1.

In an implementation, the work collection sets 1541 and 1542 areassociated with an account (e.g., the account 1401 of FIG. 14) of theexternal system 770, and the work collection set 1543 is associated witha second account (e.g, the account 1404 of FIG. 14) of the externalsystem 770. The work collection set 1544 is associated with asub-account (e.g., the account 1402 of FIG. 14) of the first account ofthe external system 770. The work collection set 1545 is associated withan account (e.g., the account 1405 of FIG. 14) of a second externalsystem 1591 that is different from the system 770.

In the example embodiment, an account holder manages work collections byusing the workflow API Module 707. In some embodiments, an accountholder manages work collections by using an API for the workcollections. In some embodiments, the work distribution system 700manages work collections according to workflow instructions.

In the example embodiment, each work collection can be configured tospecify operational logic. In some embodiments, each work collection isconstructed to include an attribute that specifies an expression thatdefines worker selection criteria for work items residing in the workcollection, and a corresponding external system configures the workerselection criteria by using at least one REST API.

In an implementation, the work collection is a queue. In someimplementations, the work collection is at least one of a queue, a bin,a set and a list.

In an implementation, a work item residing in a work collection isordered in accordance with a priority assigned to the work item by thework distribution system 700 based on a workflow instructioncorresponding to the workflow information of the work item.

In some implementations, at least one work collection of the system 700is an unordered collection of work items.

Work Distribution Processing Engine 706

In the example embodiment, the work distribution processing Engine 706functions to assign priorities to work items of the system 700 andassign workers to work items of the system 700.

In the example embodiment, the work distribution processing Engine 706includes a workflow API module 707, a work distribution module 708, anda workflow instruction module 709. In some implementations, the workdistribution processing engine 706 includes the distribution API module710. In some implementations, the work distribution system does notinclude a distribution API module.

Workflow API Module 707

In an implementation, the workflow API module 707 functions to provide aworkflow instruction document request to the system 770, the requestidentifying a URI (Uniform Resource Identifier) that identifies aresource of the external system 770 that provides the workflowinstruction document for the work item. In an implementation, the system770 responds to the workflow instruction document request by providingthe workflow API module 707 with a work instruction document response inaccordance with the workflow API. In an implementation, a workflowinstruction document response in accordance with the workflow APIincludes the Workflow Instruction Document. In an implementation, theworkflow instruction document response in accordance with the workflowAPI includes the Workflow Instruction Document and an AssignmentCallback, and responsive to assignment of a worker to the work item, thework distribution system 700 provides assignment information to theexternal system 770 via the Assignment Callback.

In the example embodiment, API call requests received by the workflowAPI module 707 include authenticating parameters, which are used by thesystem 700 to verify authenticity of the API call requests. In animplementation, API call requests received by the workflow API module707 specify an account ID and a corresponding authentication token, andthe workflow API module 707 uses the account module 701 to authenticatethe API call request.

In an implementation, the workflow API module 707 functions to provide aWorkflow API that is used by an external system to manage workflowinstructions of a specified account. The workflow API module 707 isconstructed to process requests received from an external system to adda workflow instruction to the work distribution system 700, and requestsreceived from an external system to remove a workflow instruction fromthe work distribution system 700, read a workflow instruction, andupdate a workflow instruction.

Table 3 shows the API call requests (and the corresponding parameters)that are processed by the workflow API module 707, in accordance with animplementation.

TABLE 3 Workflow API Workflow API CALL REQUEST PARAMETERS Add WorkflowInstruction <Workflow Instruction Name>, <Workflow Instruction>,<Assignment Callback>, <Account Identifier>, <Authentication Token>,(Optional Parameters: <Primitive Group Identifier>) Remove WorkflowInstruction <Workflow Instruction Name>, <Account Identifier>,<Authentication Token> Read Workflow Instruction <Workflow InstructionName>, <Account (managed by the Work Identifier>, <Authentication Token>Instruction Module 709) Update Workerflow Instruction <WorkflowInstruction Name>, <Workflow Instruction>, <Assignment Callback>,<Account Identifier>, <Authentication Token>

As shown in Table 3, in an implementation, the Add Workflow InstructionAPI call request includes the optional parameter <Primitive GroupIdentifier> to specify a Primitive Group Identifier for the addedworkflow instruction. In an implementation, the work distribution system700 automatically assigns a Primitive Group Identifier for the addedworkflow instructions based on Account Preferences of the workdistribution account specified by the <Account Identifier> parameter.

Work Distribution Module 708

In the example embodiment, the work distribution module 708 functions toassign priorities to work items of the system 700 and assign workers towork items of the system 700.

Workflow Instruction Module 709

In the example embodiment, the workflow instruction module 709 functionsto manage workflow instructions of the work distribution system 700.

API Call Request Queuing

In the example embodiment, the worker API module 702, the work item APImodule 704, and the workflow API module 707 each place received API callrequests in a respective API call request queue.

In an implementation, API call requests are serviced at a rate suitablefor the current capacity of the work distribution system 700. Theservicing rate may alternatively be adjusted according to the number ofrequests in the respective API call request queue. In an implementation,an API call request is placed in a respective API call request queuewhen capacity is exceeded or alternatively placed in the queue for everyrequest or based on any suitable rule.

In an implementation API call requests of different work distributionaccounts (and sub-accounts) are ordered in the respective queue in astaggered or alternating fashion. In some implementations, accountholders have priority based on at least one of a service plan, afirst-come-first-serve policy, a type of call request, and any suitabletype of policy.

In some implementations, the worker API module 702, the work item APImodule 704, and the workflow API module 707 each have an API callrequest queue dedicated to requests of a single account holder, API callrequests are organized into an API call request queue for each accountholder, and dequeueing occurs in an alternating fashion between theplurality of API call request queues.

Communication Platform 711

In the example embodiment, the communication platform 711 functions toprovide telephony communication to the work distribution system 700 viaa REST API, and generates outgoing telephony communication initiated viathe REST API. In the example embodiment, the communication platform 711is external to the work distribution system 700. In some embodiments,the communication platform is internal to the work distribution system700.

In the example embodiment, the communication platform 711 is used in theexecution of communications based applications. For example, thecommunication platform can facilitate execution of automated call logicsuch as in U.S. Pat. No. 8,306,021 issued on 6 Nov. 2012, which ishereby incorporated in its entirety by this reference. In the exampleembodiment, the communication platform 711 is a telephony communicationplatform. In some embodiments, the communication platform is anysuitable type of communication platform.

In some implementations, the system 700 receives work items from thecommunication platform 711 via the work item API module 704.

4. Method for a Multi-Tenant Work Distribution Platform

As shown in FIG. 8, a method for a multitenant work distributionplatform (e.g., the platform of the system 700 of FIG. 7) in accordancewith an example embodiment includes: assigning a priority to a firstwork item (e.g., one of the work items 1561 to 1575 of FIG. 15) of afirst external system (e.g., the external system 770 of FIG. 7) S810,and assigning a worker (e.g., a worker associated with one of the workerendpoints 772 and 773 of FIG. 7) to the first work item S820.

In the example embodiment of FIG. 8, the method of FIG. 8 is implementedin the multi-tenant work distribution system 700 of FIG. 7. In theexample embodiment, the Work Distribution Processing Engine 706 performsthe blocks S810 and S820. In some embodiments, the method of FIG. 8 isimplemented in any suitable type of multi-tenant work distributionsystem.

Block 810, which includes assigning a priority to a first work item of afirst external system, functions to assign the priority to the work item(e.g., the work item 1561 of FIG. 15) based on work item attributes(e.g., 1102 of FIG. 11) of the work item and a workflow instruction(e.g., the workflow instruction 1020 of FIG. 10) corresponding toworkflow information (e.g., 1103 of FIG. 11) specified by the work item.In the example embodiment, the work item is received via the work itemAPI module 704. In an implementation, the workflow instruction isprovided by the external system via the workflow API module 707. In theexample embodiment, the work item is specified in a work item API callrequest provided by the external system 770 and received by the workitem API module 704. In an implementation, the workflow instruction isspecified in a workflow API call request provided by the external system770 and received by the workflow API module 707. In an implementation,the workflow instruction is specified in a workflow API responseprovided by the external system 770 and received by the workflow APImodule 707 responsive to a request provided by the workflow API module707 to the external system 770. During processing of the work item APIcall request, the system adds the work item to a work collection managedby the work collection module 705. In an implementation, the workcollection is specified in the API call request. In an implementation,the work collection is specified by configuration information associatedwith the account holder corresponding to the work item API call request.In an implementation, the work collection is a default work collection.Responsive to selection of the work item in the work collection, thesystem 700 assigns the priority to the work item.

As shown in FIG. 9, in an implementation of the example embodimentassigning a priority to a work item of a first external system includesaccessing a workflow instruction document (e.g., 1000 of FIG. 10)specified by the workflow information (e.g., 1103 of FIG. 11) of thework item S811, and applying a prioritization function (e.g., 1010 ofFIG. 10) to the work item S812.

Block S811, which includes accessing a workflow instruction documentspecified by the workflow information of the work item, functions tocontrol the work distribution module 708 to access the workflowinstruction document by using the workflow instruction module 709. Inthe example embodiment, the workflow instruction document (e.g., 1000 ofFIG. 10) specifies the prioritization function (e.g., 1010 of FIG. 10),and the prioritization function includes the workflow instruction (e.g.,1020 of FIG. 10). FIG. 10 depicts an exemplary workflow instructiondocument 1000 that includes a prioritization function 1010 and aworkflow instruction 1020. The prioritization workflow instruction 1020defines a work item expression“(work.attributes.valueClassification==‘gold’)” and a correspondingpriority value “work.priority+20”. In the example embodiment, the workdistribution system 700 defines an expression syntax for work itemexpressions used in the work distribution system 700. FIG. 11 depicts adata structure that represents an exemplary first work item 1101. Asshown in FIG. 11, the work item 1101 has work item attributes 1102 thatinclude a “valueClassification” attribute having a “gold” value. Duringprocessing of the work item 1101 by using the workflow instructiondocument woo, the workflow distribution module 708 determines that thework item 1101 matches the first work item expression of theprioritization workflow instruction 1020 because the first work itemexpression specifies a “gold” value for the “valueClassification” workitem attribute and the work item 1101 has a “valueClassification” workitem attribute having a “gold” value.

In the example embodiment, the external system (e.g., 770 of FIG. 7)defines the workflow instructions of the workflow instruction document(e.g., woo) according to the expression syntax defined by the workdistribution system 700, and the external system also specifies the workitem attributes of the work item (e.g., 1101). In this manner, theexternal system (e.g., 770) can use the work distribution system 700 toperform work item distribution in accordance with business logic of theexternal system. In this manner, the work distribution system 700 can beused to distribute any type of work item for any type of externalsystem.

FIGS. 12A, 12B and 12C depict exemplary prioritization functions inaccordance with implementations.

The prioritization function of FIG. 12A functions to prioritize a workitem “work” based on an initial priority “work.priority” of the workitem. The prioritization function of FIG. 12B functions to prioritize awork item “work” based on an amount that an account holder's customerassociated with the work item spends (e.g.,“work.attributes.spend>10000”) per month for use of the service providedby the account holder. As shown in FIG. 12B, a work item associated witha customer spending over $10,000 a month is assigned a priority value of10, whereas a work item associated with a customer spending over $1,000(but not over $10,000) a month is assigned a priority value of 5. Theprioritization function of FIG. 12C functions to prioritize a work item“work” based on an amount of elapsed since the work item was added tothe work distribution system 700. As shown in FIG. 12C, if over fiveminutes has elapsed, then the priority of the work item is increased by10, and a check of the work item's wait time is scheduled in anotherfive minutes.

In an implementation, the workflow instruction module 709 receives theworkflow instruction document from the external system 770 via theworkflow instruction API module 707. In an implementation, the workflowinstruction module 709 stores the workflow instruction document receivedfrom the external system. In an implementation, the workflow instructionmodule 709 uses the workflow information (e.g., 1103 of FIG. 11)specified by the work item to access the workflow instruction documentfrom the external system 770. In an implementation, the workflowinformation includes a URI (Uniform Resource Identifier) that identifiesa resource of the external system 770 that provides the workflowinstruction document for the work item. In an implementation, theworkflow instruction module 709 provides a workflow instruction documentrequest to the system 770 via the workflow instruction API module 707,the request identifies the URI of the workflow information of the workitem, and, responsive to the workflow instruction document request, theexternal system 770 provides the workflow instruction document in aworkflow instruction document response (in accordance with the workflowAPI). In an implementation, the workflow instruction document requestspecifies metadata of the work item and the corresponding workcollection, and the external system uses the metadata to provide theworkflow instruction document. In an implementation, the workflowinstruction document request specifies metadata of the work item, thecorresponding work collection, and corresponding workers, and theexternal system uses the metadata to provide the workflow instructiondocument. In an implementation, the external system 770 uses internalstate information of the system 770 to generate the workflow instructiondocument. By virtue of the workflow instruction module 709 accessing theworkflow instruction document specified by the workflow information ofthe first work item from the external system 770 after the externalsystem 770 provides the request to add the work item to the workdistribution system 700, the external system 770 can generate workflowinstructions for the work item during processing of the work item toassign a priority and during processing of the work item to assign aworker.

In an implementation, if a workflow instruction document correspondingto the workflow information is stored by the workflow instruction module709 prior to block S811, then the workflow instruction module 709accesses the stored workflow instruction document at block S811 insteadof receiving the workflow instruction document from the external system770. In an implementation, if a workflow instruction documentcorresponding to the workflow information is stored by the workflowinstruction module 709 prior to block S811 and a configuration parameterconfigures the workflow instruction module 709 to access stored workflowinstruction documents when available, then the workflow instructionmodule 709 accesses the stored workflow instruction document at blockS811 instead of receiving the workflow instruction document from theexternal system 770; otherwise if the configuration parameter configuresthe workflow instruction module to retrieve the workflow instructiondocument from the external server regardless of whether the document isstored by the workflow instruction module 709, then the workflowinstruction module 709 receives the workflow instruction document fromthe external system 770.

Block S812, which includes applying the prioritization function (e.g.,the prioritization function 1010 of FIG. 10) to the work item (e.g., thework item 1101 of FIG. 11), functions to control the work distributionmodule 708 to assign the priority value to the work item responsive to adetermination by the work distribution module 708 that the work itemmatches the work item expression.

Reverting to FIG. 8, block 820, which includes assigning a worker to thework item, functions to assign a worker to the work item based on thepriority (e.g., 1104 of FIG. 11) of the work item, the workflowinformation (e.g., 1103 of FIG. 11), and worker state managed by theexternal system (e.g., 770 of FIG. 7) via the worker API module 702. Inthe example embodiment, the worker state includes worker attributes, thework item is generated by the external system (e.g., 770 of FIG. 7), andthe workflow instruction (e.g., 1020 of FIG. 10) is managed by theexternal system via the Workflow API module 707.

In an implementation, the external system 770 generates the work itembased on a telephony communication received by the external system 770.

In an implementation, the work item attributes of the work item arespecified by the external system 770 via the work item API module 704,and the worker attributes are specified by the external system 770 viathe worker API module 702.

As shown in FIG. 13, in an implementation of the example embodiment,assigning a worker to the work item includes selecting the work itemfrom a work collection in which the work item resides S821, accessingthe workflow instruction document S822, determining a first availableworker S823, applying a distribution function to the work item and thefirst available worker S824, and assigning the first available worker tothe work item S825.

Block S821, which includes selecting the work item from a workcollection in which the work item resides, functions to control the workdistribution module 708 to select the work item (e.g., 1561 of FIG. 15)from the work collection (e.g., 1551 of FIG. 15) based on the assignedpriority of the work item. In the example embodiment, the workcollection is managed by the work collections module 705, and the workdistribution module 708 selects the work item by using the workcollections module 705. In an implementation, work items residing in thework collection (e.g., the work items 1561, 1562, and 1563 of the workcollection 1551 of FIG. 15) are ordered in accordance to priority valuesassigned to the work items, and responsive to a request for selection ofa work item by the work distribution module 708, the work collectionsmodule 705 provides the work distribution module 708 with a work item(e.g., one of 1561-1563 of FIG. 15) having a highest priority value. Inother words, the selected work item is the work item of the workcollection having a highest priority value.

In some implementations, the work items residing in the work collectionare unordered, and responsive to a request for selection of a work itemby the work distribution module 708, the work collections module 705provides the work distribution module 708 with a work item based on atleast one of a FIFO (First In First Out) selection technique, a LIFO(Last In First Out) selection technique, attributes of the work items,and any other suitable work item selection technique.

In an implementation, the work collection is a queue. In someimplementations, the work collection is at least one of a queue, a bin,a set and a list.

Block S822, which includes accessing the workflow instruction document,functions to functions to control the work distribution module 708 toaccess the workflow instruction document (e.g., 1000 of FIG. 10) byusing the workflow instruction module 709 as described herein for blockS811. In the example embodiment, the workflow instruction documentspecifies a distribution function. The distribution function defines anassignment expression. FIG. 10 depicts an exemplary workflow instructiondocument 1000 that includes a distribution function 1030 and anassignment expression 1040. The assignment expression 1040 specifieswork item attributes (e.g., “valueClassification”, “language”,“segment”, “region”) and worker attributes (e.g., “English”,“retentionSkill”, “location”). In the example embodiment, the workdistribution system 700 defines an expression syntax for assignmentexpressions used in the work distribution system 700. FIG. 11 depicts adata structure that represents an exemplary work item 1101. As shown inFIG. 11, the work item 1101 has work item attributes 1102 that include a“valueClassification” attribute having a “gold” value, a “language”attribute having an “English” value, a “Segment” attribute having a“retention” value, and a “region” attribute having a “California” value.

During processing of the work item 1101 by using the workflowinstruction document 1000, the workflow distribution module 708determines that the work item 1101 and a worker having a “English”attribute with a value greater than 10, “retentionSkill” attribute witha value greater than 15, and a “location” attribute having a“California” value match the assignment expression 1040

FIGS. 12D and 12E depict exemplary distribution functions in accordancewith implementations. The distribution function of FIG. 12D functions toassign a first available worker to the highest priority work item. Thedistribution function of FIG. 12E functions to assign a worker with thelanguage skills to service the work item.

Block S823, which includes determining a first available worker,functions to control the work distribution module 708 to determine afirst available worker (e.g., a worker associated with one of workerendpoints 772 and 773 of FIG. 7) managed by the external system 770based on worker state managed by the external system (e.g., 770 of FIG.7). In the example embodiment, the worker state for each worker includesa status which indicates whether the worker is available.

The work distribution module 708 accesses worker state for all workersassociated with the work distribution account corresponding to the firstwork item. In some implementations, the work distribution module 708accesses worker state for all workers associated with both the workdistribution account and a workspace corresponding to the first workitem. In some implementations, the work distribution module 708 accessesworker state for all workers associated with both the work distributionaccount and a primitive group corresponding to the first work item.

By accessing worker state for a work item based on a matching workdistribution account, account holders can configure the pool of workersavailable to process the work items of the account holder. In otherwords, not only can an account holder mange generation of work items andworkflow of work item assignment to workers, the account holder can alsomanage the pool of workers available for processing of the work items.In this manner, the work distribution system 700 provides a multi-tenantplatform in which each account holder of the work distribution platformcan manage their own pool of workers. In some implementations, workerscan be used across accounts, with workers managed by a first accountholder being available to process work items of a different accountholder.

By accessing worker state for a work item based on a matching workdistribution account and workspace or primitive group, account holderscan configure the pools of workers for each workflow. For example, anaccount holder can have a primitive group (or workspace) for a salesworkflow and a primitive group (or workspace) for a support workflow,and the account holder can configure different pools of workers for eachof the support workflow and the sales workflow.

As another example, an account holder can have a primitive group (orworkspace) for each sub-account, and the account holder can configuredifferent pools of workers for each sub-account. For example, in a caseof an account holder that provides work distribution sub-accounts foreach customer of the account holder, the account holder can configuredifferent pools of workers for each of the account holder's customers.

The distribution module 708 accesses the worker state by using theworker state module 703.

Block S824, which includes applying a distribution function to the workitem (e.g., 1561 of FIG. 15) and the first available worker, functionsto control the work distribution module 708 to determine a first one ofavailable workers as identified by the accessed worker state, and applythe distribution function of the accessed workflow instruction documentto the first available worker and the first work item to determinewhether the first available worker matches the work item.

In an implementation, the distribution function (e.g., 1030 FIG. 10)defines an assignment expression (e.g., 1040 of FIG. 10), and the firstavailable worker matches the work item if the work item attributes(e.g., 1102 of FIG. 11) of the work item and worker attributes of thefirst available worker match the assignment expression of thedistribution function.

In an implementation, the worker state for each worker indicates an idletime for the worker, and the work distribution module 708 applies thedistribution function to available workers based on idle time of each ofthe workers, such that a worker with a longer idle time is identified asan assignment candidate before other workers with shorter idle times.

Block S825, which includes assigning the first available worker to thework item, functions to control the work distribution module 708 toassign the first available worker to the work item responsive to adetermination by the work distribution module 708 that the firstavailable worker matches the work item.

In an implementation, the assignment expression includes a plurality ofassignment sub-expressions, and in a case where the work item does notmatch any available worker based on a first assignment sub-expression,the work distribution module 708 determines whether any availableworkers match the work item based on a different sub-expression of theassignment expression. In an implementation, a plurality ofsub-expressions are ordered, and the work distribution module 708evaluates sub-expressions of the assignment expression according to theorder of the sub-expressions in the assignment expression.

In an implementation, the work distribution module 708 records anassignment of the first available work item to the first work item.

In an implementation, the work distribution module 708 providesassignment information to the external system (e.g., 770 of FIG. 7) thatprovided the work item (e.g., 1561 of FIG. 15) via an HTTP callback(Assignment Callback) specified by the external system in associationwith the work item.

In an implementation, the assignment information specifies at least theworker attributes of the worker and the work item attributes of the workitem.

The external system processes the work item responsive to receipt of theassignment information from the work distribution system 700.

In an implementation, external system 770 processes the work item byproviding at least one work processing instruction to the workdistribution system 770, and responsive to completion of processing ofthe work item by the worker, the work distribution system updates theworker state of the worker to include an available status such that theworker can be assigned to a new work item by the work distributionsystem 770.

In an implementation, the work processing instruction includes aninstruction to provide information of the work item to a worker endpoint(e.g., one of 772 and 773 of FIG. 7) associated with the worker via athe distribution API 710.

In some implementations, the external system 770 processes the work itemby providing information of the work item to a worker endpoint (e.g.,one of 772 and 773 of FIG. 7) associated with the worker, and responsiveto completion of processing of the work item by the worker, the externalsystem 770 updates the worker state of the worker to include anavailable status via the worker API module 702 such that the worker canbe assigned to a new work item by the work distribution system 700.

In an implementation, the first work item is delivered to a workerendpoint of the worker assigned to the first work item, in a mannersimilar to that described above for block S400 of FIG. 2.

In some implementations, the Work Distribution Processing Engine 706performs the heuristics described herein for block S300 of FIG. 3,during performance of the blocks S810 and S820 of FIG. 8.

5. Method for a Multi-Tenant Work Distribution Platform

As shown in FIG. 16A, a method for a multitenant work distributionplatform (e.g., the platform of the system 700 of FIG. 7) in accordancewith an example embodiment includes: assigning a priority to a firstwork item (e.g., one of the work items 1561 to 1575 of FIG. 15) of afirst external system (e.g., the external system 770 of FIG. 7) S1610,and assigning a worker (e.g., a worker associated with one of the workerendpoints 772 and 773 of FIG. 7) to the first work item S1620.

In the example embodiment of FIG. 16A, the method of FIG. 16A isimplemented in the multi-tenant work distribution system 700 of FIG. 7.In the example embodiment, the Work Distribution Processing Engine 706performs the blocks S1610 and S1620. In some embodiments, the method ofFIG. 16A is implemented in any suitable type of multi-tenant workdistribution system.

Block 1610, which includes assigning a priority to a work item of anexternal system, functions to assign the priority to the work item(e.g., the work item 1561 of FIG. 15) based on work item attributes ofthe work item and a workflow instruction corresponding to workflowinformation specified by the work item. In the example embodiment, thework item is received via the work item API module 704, and the workflowinstruction is provided by the external system via the workflow APImodule 707. In the example embodiment, the work item is specified in awork item API call request provided by the external system 770 andreceived by the work item API module 704, and the workflow instructionis specified in a workflow API call request provided by the externalsystem 770 and received by the workflow API module 707. In animplementation, responsive to the workflow instruction from the externalsystem 770, the workflow instruction module 709 stores the workflowinstruction. During processing of the work item API call request, thesystem 700 assigns the priority to the work item and places the workitem in a work collection based on the workflow instruction. In animplementation, the workflow information specified by the work itemidentifies the workflow instruction provided by the external system 770via the workflow API module 770 and stored by the workflow instructionmodule 709, and during processing of the work item API call request, theworkflow instruction corresponding to the work item is accessed by usingthe workflow instruction module 709.

As shown in FIG. 16B, in an implementation of the example embodiment ofFIG. 16A, assigning a priority to a work item of an external systemincludes accessing a workflow instruction specified by the workflowinformation of the work item, the workflow instruction specifying atleast one work item expression and a corresponding priority S1611, andassigning the priority value corresponding to the workflow instructionto the work item responsive to a determination that the work itemmatches a work item expression of the workflow instruction S1612. In animplementation, the workflow instruction specifies a target workerexpression corresponding to each work item expression of the workflowinstruction.

As shown in FIG. 16C, in an implementation of the example embodiment ofFIG. 16A, assigning a worker to the work item includes adding the workitem in a work collection corresponding to the corresponding targetworker expression S1621, selecting the work item from the workcollection based on the assigned priority of the work item S1622,determining a first available worker having worker attributes that matchthe target worker expression S1623, and responsive to a determination ofa first available worker having worker attributes that match the targetworker expression, assigning the first available worker to the work itemS1624. In an implementation, block S1624 (“assigning the first availableworker to the work item”) is similar to block S825 (“assigning the firstavailable worker to the work item”) of FIG. 8.

6. System Architecture: Work Distribution System

FIG. 17 is an architecture diagram of the work distribution system 700according to an implementation in which the account module 701, theworker API module 702, the worker state module 703, the work item APImodule 704, the work collections module 705, the work distributionengine 706, and the distribution API module 710 are included in a serverdevice.

The bus 1701 interfaces with the processors 1701A-1701N, the main memory(e.g., a random access memory (RAM)) 1722, a read only memory (ROM)1704, a processor-readable storage medium 1705, a display device 1707, auser input device 1708, and a network device 1711.

The processors 1701A-1701N may take many forms, such as ARM processors,X86 processors, and the like.

In some implementations, the system 700 includes at least one of acentral processing unit (processor) and a multi-processor unit (MPU).

As described above, the processors 1701A-1701N and the main memory 1722form a processing unit 1799. In some embodiments, the processing unitincludes one or more processors communicatively coupled to one or moreof a RAM, ROM, and machine-readable storage medium; the one or moreprocessors of the processing unit receive instructions stored by the oneor more of a RAM, ROM, and machine-readable storage medium via a bus;and the one or more processors execute the received instructions. Insome embodiments, the processing unit is an ASIC (Application-SpecificIntegrated Circuit). In some embodiments, the processing unit is a SoC(System-on-Chip). In some embodiments, the processing unit includes oneor more of the account module 701, the worker API module 702, the workerstate module 703, the work item API module 704, the work collectionsmodule 705, the work distribution engine 706, and the distribution APImodule 710.

The network adapter device 1711 provides one or more wired or wirelessinterfaces for exchanging data and commands between the system 1700 andother devices, such as devices of the external system 770 of FIG. 7.Such wired and wireless interfaces include, for example, a universalserial bus (USB) interface, Bluetooth interface, Wi-Fi interface,Ethernet interface, near field communication (NFC) interface, and thelike.

Machine-executable instructions in software programs (such as anoperating system, application programs, and device drivers) are loadedinto the memory 1722 (of the processing unit 1799) from theprocessor-readable storage medium 1705, the ROM 1704 or any otherstorage location. During execution of these software programs, therespective machine-executable instructions are accessed by at least oneof processors 1701A-1701N (of the processing unit 1799) via the bus1701, and then executed by at least one of processors 1701A-1701N. Dataused by the software programs are also stored in the memory 1722, andsuch data is accessed by at least one of processors 1701A-1701N duringexecution of the machine-executable instructions of the softwareprograms.

The processor-readable storage medium 1705 is one of (or a combinationof two or more of) a hard drive, a flash drive, a DVD, a CD, an opticaldisk, a floppy disk, a flash storage, a solid state drive, a ROM, anEEPROM, an electronic circuit, a semiconductor memory device, and thelike. The processor-readable storage medium 1705 includes an operatingsystem 1712, software programs 1713, device drivers 1714, the accountmodule 701, the worker API module 702, the worker state module 703, thework item API module 704, the work collections module 705, the workdistribution engine 706, and the distribution API module 710.

7. System Architecture: Application Server of External System

FIG. 18 is an architecture diagram of the application server 771 of theexternal system 770 of FIG. 7 according to an example embodiment. In animplementation, the processors 1801A-1801N, main memory 1822, read onlymemory (ROM) 1804, processor-readable storage medium 1805, displaydevice 1807, user input device 1808, network device 1811, and processingunit 1899 are similar to the processors 1701A-1701N, main memory 1722,read only memory (ROM) 1704, processor-readable storage medium 1705,display device 1707, user input device 1708, network device 1711, andprocessing unit 1799 of FIG. 17.

The processor-readable storage medium 1805 includes an operating system1812, software programs 1813, device drivers 1814, and applicationmodules 1815. In an implementation, the application modules 1815 areconstructed to manage work items by using the work item API of the workitem API module 704 and manage workflow instructions by using theworkflow API of the workflow API module 707, as described herein.

7. System Architecture: Worker Endpoint Device

FIG. 19 is an architecture diagram of a worker endpoint device 1900 ofthe external system 700 of FIG. 7 according to an example embodiment.The worker endpoint device 1900 implements the worker endpoint 772 ofFIG. 7. In an implementation, a worker endpoint device that implementsthe worker endpoint 773 of FIG. 7 has an architecture similar to thearchitecture of the worker endpoint device 1900.

In an implementation, the processors 1901A-1901N, main memory 1922, readonly memory (ROM) 1904, processor-readable storage medium 1905, displaydevice 1907, user input device 1908, network device 1911, and processingunit 1999 are similar to the processors 1701A-1801N, main memory 1722,read only memory (ROM) 1704, processor-readable storage medium 1705,display device 1707, user input device 1708, network device 1711, andprocessing unit 1799 of FIG. 17.

The processor-readable storage medium 1905 includes an operating system1912, software programs 1913, device drivers 1914, and a worker endpointapplication module 1915. The worker endpoint application module 1915includes a worker application endpoint module 1916 and a media endpointmodule 1917.

The worker endpoint application module 1915 corresponds to the workerendpoint 772, the worker application endpoint module 1916 corresponds tothe worker application endpoint 774, and the media endpoint module 1916corresponds to the media endpoint 776 of FIG. 7.

In an implementation, the worker endpoint application module 1915 isconstructed to manage a worker associated with the worker endpoint 772of FIG. 7 by using the worker API of the worker API module 702 andprocess work items received by using the distribution API of thedistribution API module 710, as described herein.

CONCLUSION

The systems and methods described herein with respect to a “first workitem” and a “first external system” function in a similar manner withrespect to other work items and external systems.

The system and method of the preferred embodiment and variations thereofcan be embodied and/or implemented at least in part as a machineconfigured to receive a computer-readable medium storingcomputer-readable instructions. The instructions are preferably executedby computer-executable components preferably integrated with the workdistribution system. The computer-readable medium can be stored on anysuitable computer-readable media such as RAMs, ROMs, flash memory,EEPROMs, optical devices (CD or DVD), hard drives, floppy drives, or anysuitable device. The computer-executable component is preferably ageneral or application specific processor, but any suitable dedicatedhardware or hardware/firmware combination device can alternatively oradditionally execute the instructions.

As a person skilled in the art will recognize from the previous detaileddescription and from the figures and claims, modifications and changescan be made to the preferred embodiments of the invention withoutdeparting from the scope of this invention defined in the followingclaims.

1. (canceled)
 2. A method comprising: at a multi-tenant workdistribution system: responsive to a first work item API requestprovided by a first external application server system of a firstaccount of a plurality of accounts of the multi-tenant work distributionsystem, determining a first worker identifier of a plurality of workeridentifiers configured for the first account to be assigned to a firstwork item corresponding to the first work item API request; providingfirst assignment information to the first external application serversystem via a first callback configured for the first account, whereinthe first assignment information specifies at least the first workeridentifier and work item attributes of the first work item, wherein thework distribution system receives the first work item API request fromthe first external application server system via an application protocolcommunication, wherein the work distribution system provides the firstassignment information to the first external application server systemvia an application protocol communication.
 3. The method of claim 2,wherein the first worker identifier is a worker name.
 4. The method ofclaim 3, wherein the application protocol is as Hypertext TransferProtocol (HTTP).
 5. The method of claim 4, wherein the first externalapplication server system processes the first work item responsive toreceipt of the first assignment information from the work distributionsystem.
 6. The method of claim 4, the method further comprising:responsive to at least one work processing instruction provided by thefirst external application server system for the first assignmentinformation, the work distribution system: determining whether a workeridentified by the worker identifier has completed processing of the workitem; and responsive to a determination that the worker has completedprocessing of the work item, the work distribution system updatingworker state of the worker to include an available status such that theworker can be assigned to a new work item by the work distributionsystem, wherein the first external application server system provideseach work processing instruction via an application protocolcommunication.
 7. The method of claim 6, wherein the at least one workprocessing instruction includes an instruction to provide information ofthe work item to a worker endpoint associated with the worker identifiedby the worker identifier, the method further comprising the workdistribution system providing the information of the work item to theworker endpoint responsive to receiving the instruction to provideinformation to the worker endpoint.
 8. The method of claim 4, the methodfurther comprising: the work distribution system receiving at least oneworkflow instruction of the first account, wherein the work distributionsystem determines the first work identifier in accordance with the atleast one workflow instruction.
 9. The method of claim 8, wherein thefirst external application server system manages work distributionprimitives associated with the first account by providing at least oneapplication protocol communication to the work distribution system, andwherein work distribution primitives include at least workers, workitems, work distribution workflows and work collections.
 10. The methodof claim 9, wherein each workflow is defined by a workflow instructiondocument that includes at least one workflow instruction, whereinworkflow instructions of each workflow instruction document define logicon how a particular work item is paired with a worker, and wherein eachwork collection is constructed to store pending work items.
 11. Themethod of claim 10, wherein the work distribution system receives the atleast one workflow instruction of the first account from the firstexternal application server system via an application protocolcommunication.
 12. A method comprising: at a multi-tenant workdistribution system: responsive to a first work item API requestprovided by a multi-tenant telephony communication platform on behalf ofa first account of a plurality of accounts of the multi-tenant workdistribution system, determining a first worker identifier of aplurality of worker identifiers configured for the first account to beassigned to a first work item corresponding to the first work item APIrequest; providing first assignment information to a first externalapplication server system of the first account via a first callbackconfigured for the first account, wherein the first assignmentinformation specifies at least the first worker identifier and work itemattributes of the first work item, wherein the work distribution systemreceives the first work item API request from the multi-tenant telephonycommunication platform via an application protocol communication, andwherein the work distribution system provides the first assignmentinformation to the first external application server system via anapplication protocol communication.
 13. The method of claim 12, whereinthe first worker identifier is a worker name.
 14. The method of claim12, wherein the application protocol is a Hypertext Transfer Protocol(HTTP).
 15. The method of claim 12, wherein the first externalapplication server system processes the first work item responsive toreceipt of the first assignment information from the work distributionsystem.
 16. The method of claim 12, the method further comprising:responsive to at least one work processing instruction provided by thefirst external application server system for the first assignmentinformation, the work distribution system: determining whether a workeridentified by the worker identifier has completed processing of the workitem; and responsive to a determination that the worker has completedprocessing of the work item, the work distribution system updatingworker state of the worker to include an available status such that theworker can be assigned to a new work item by the work distributionsystem, wherein the first external application server system provideseach work processing instruction via an application protocolcommunication.
 17. The method of claim 16, wherein the at least one workprocessing instruction includes an instruction to provide information ofthe work item to a worker endpoint associated with the worker identifiedby the worker identifier, the method further comprising the workdistribution system providing the information of the work item to theworker endpoint responsive to receiving the instruction to provideinformation to the worker endpoint.
 18. The method of claim 12, themethod further comprising: the work distribution system receiving atleast one workflow instruction of the first account, wherein the workdistribution system determines the first work identifier in accordancewith the at least one workflow instruction.
 19. The method of claim 18,wherein the first external application server system manages workdistribution primitives associated with the first account by providingat least one application protocol communication to the work distributionsystem, and wherein work distribution primitives include at leastworkers, work items, work distribution workflows and work collections.20. The method of claim 19, wherein each workflow is defined by aworkflow instruction document that includes at least one workflowinstruction, wherein workflow instructions of each workflow instructiondocument define logic on how a particular work item is paired with aworker, and wherein each work collection is constructed to store pendingwork items.
 21. The method of claim 20, wherein the work distributionsystem receives the at least one workflow instruction of the firstaccount from the first external application server system via anapplication protocol communication.